iT邦幫忙

2023 iThome 鐵人賽

DAY 14
0
自我挑戰組

轉職仔與JavaScript的初次相遇系列 第 14

JavaScript的Execution context(執行上下文)- Day14

  • 分享至 

  • xImage
  •  

前言

昨天我們講解了Call Stack和Memory Heap,今天我們將講解Call Stack裡頭的Execution context。

說明

Execution context(執行上下文):

  • 執行上下文包含當前正在運行的程式碼和有助於其執行的所有內容 (運行程式碼所需內容)

https://ithelp.ithome.com.tw/upload/images/20230920/20162465rJWvrwbLcn.png

整個紙袋:Execution context | 裡頭食物:JavaScript程式碼 | 裡頭餐具:有助於執行的內容

JavaScript中有兩種執行上下文:

全域執行上下文(GEC)

  • 全域執行上下文儲存了所有『非函式內部』的JavaScript程式碼,其代表JavaScript中的全域範圍
  • 初次執行JavaScript程式碼時,引擎就會建立GEC (整個程式碼執行的起點)
  • 每一個JavaScript程式碼,只會有『一個』GEC

函式執行上下文(FEC)

  • 每當呼叫函式時都會建立函式執行上下文,其代表函式的局部範圍。

那執行上下文是如何被創建的?
執行上下文的建立分為兩個階段:

1.Creation phase (創建階段)
2.Execution phase (執行階段)

那Execution context裡頭有什麼?

  1. Variable Environment
  • let, const和var declaration (宣告) : 在GEC中,它包含了全域範圍的變數和函數;在FEC中,包含了函數的局部變數和參數
  • Function(函式)
  • Argument object : 只在FEC中存在
  1. Scope Chain
  2. this keyword

舉例

在GEC的Creation phase中,步驟如下:

  1. 創建Global object (瀏覽器: Window object)
  2. 建立Scope
  3. 創建this keyword,並綁定至Global object (瀏覽器:綁定至Window object)
  4. 將Variable, function分配至記憶體
    再來就進入,Execution phase,步驟如下:
  5. 逐行執行程式碼
  6. 遇到遞迴時,使用Call Stack來排定工作順序

小結

Scope, this keyword這些概念雖尚未解釋,但為了筆記完整性還是先寫了,後續會再來介紹!


上一篇
JavaScript引擎的Call Stack和Memory Heap - Day13
下一篇
JavaScript Hoisting (提昇)和TDZ(暫時性死區) - Day15
系列文
轉職仔與JavaScript的初次相遇30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言